<?php
namespace Home\Controller;

class ChargeController extends BaseController{
    function recharge(){
        if(IS_POST){
            $alipay_config = C('alipay');
            require_once(__ROOT__."/Public/lib/alipay_submit.class.php");
            
            $dingdan = mt_rand(10000,99999);
            $alipay_config['notify_url'] = U('Charge/notify_url',array(),true,true);
            $alipay_config['return_url'] = U('Charge/return_url',array(),true,true);
//             dump($alipay_config);die;
            /**************************请求参数**************************/
            //商户订单号，商户网站订单系统中唯一订单号，必填
            $out_trade_no = $dingdan;
            
            //订单名称，必填
            $subject = '会员充值';
            
            //付款金额，必填
            $total_fee = $_POST['num'];
            
            //商品描述，可空
            $body = '充值';
            
            
            /************************************************************/
            
            //构造要请求的参数数组，无需改动
            $parameter = array(
                "service"       => $alipay_config['service'],
                "partner"       => $alipay_config['partner'],
                "seller_id"  => $alipay_config['seller_id'],
                "payment_type"	=> $alipay_config['payment_type'],
                "notify_url"	=> $alipay_config['notify_url'],
                "return_url"	=> $alipay_config['return_url'],
                
                "anti_phishing_key"=>$alipay_config['anti_phishing_key'],
                "exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
                "out_trade_no"	=> $out_trade_no,
                "subject"	=> $subject,
                "total_fee"	=> $total_fee,
                "body"	=> $body,
                "_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
                //其他业务参数根据在线开发文档，添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
                //如"参数名"=>"参数值"
                
            );
            
            //建立请求
            $alipaySubmit = new \AlipaySubmit($alipay_config);
            $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
            echo $html_text;
        }else {            
            $this->display('User/recharge');
        }
    }
    
    public function notify_url(){
        $alipay_config = C('alipay');
        require_once(__ROOT__."/Public/lib/alipay_notify.class.php");
        
        //计算得出通知验证结果
        $alipayNotify = new \AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        
        if($verify_result) {//验证成功
            
            //请在这里加上商户的业务逻辑程序代
            
            
            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            
            //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
            
            //商户订单号
            
            $out_trade_no = $_POST['out_trade_no'];
            
            //支付宝交易号
            
            $trade_no = $_POST['trade_no'];
            
            //交易状态
            $trade_status = $_POST['trade_status'];
            
            
            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序
                
                //注意：
                //退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
                
                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
            }
            else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序
                
                //注意：
                //付款完成后，支付宝系统发送该交易状态通知
                
                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
            }
            
            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
            
            echo "success";		//请不要修改或删除
            
            
        }
        else {
            //验证失败
            echo "fail";
            
            //调试用，写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
        }
    }
    
    public function return_url(){
        $alipay_config = C('alipay');
        require_once(__ROOT__."/Public/lib/alipay_notify.class.php");
        //计算得出通知验证结果
        $alipayNotify = new \AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {//验证成功
            
            //请在这里加上商户的业务逻辑程序代码
            
            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
            
            //商户订单号
            
            $out_trade_no = $_GET['out_trade_no'];
            
            //支付宝交易号
            
            $trade_no = $_GET['trade_no'];
            
            //交易状态
            $trade_status = $_GET['trade_status'];
            
            
            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //如果有做过处理，不执行商户的业务程序
            }
            else {
                echo "trade_status=".$_GET['trade_status'];
            }
            
            
            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
            
            // 记录充值
            $user_id = session('user.id');
            $res = setUserLog($user_id, 1, '支付宝充值', 1,I('get.total_fee'));
            
            if ($res){
                $this->success('充值成功',U('User/index'),5);
            }else {
                $this->error('充值失败',U('User/index'),5);
            }
        }
        else {
            //验证失败
            //如要调试，请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
        }
    }
}